package com.cheer.ba.http.request;

import com.cheer.ba.http.API;
import com.cheer.ba.model.ArticleModel;
import com.cheer.ba.model.AskGetMoneyModel;
import com.cheer.ba.model.BankModel;
import com.cheer.ba.model.BannerModel;
import com.cheer.ba.model.BreakRulesModel;
import com.cheer.ba.model.CalculateMoneyModel;
import com.cheer.ba.model.CheerCircleModel;
import com.cheer.ba.model.LookMyBillModel;
import com.cheer.ba.model.CommentModel;
import com.cheer.ba.model.ConstantModel;
import com.cheer.ba.model.CouponCardModel;
import com.cheer.ba.model.MyAddressModel;
import com.cheer.ba.model.MyOrderModel;
import com.cheer.ba.model.MyTradeRecordModel;
import com.cheer.ba.model.NewPayModel;
import com.cheer.ba.model.OilCardInfoModel;
import com.cheer.ba.model.OilDetailsModel;
import com.cheer.ba.model.OilGoodsInfoModel;
import com.cheer.ba.model.OilMealModel;
import com.cheer.ba.model.HotExchangeModel;
import com.cheer.ba.model.MapModel;
import com.cheer.ba.model.MyCardGroupModel;
import com.cheer.ba.model.PayInfoModel;
import com.cheer.ba.model.PlayerModel;
import com.cheer.ba.model.PointModel;
import com.cheer.ba.model.QyeAuthModel;
import com.cheer.ba.model.QyePayInfoModel;
import com.cheer.ba.model.ResponseData;
import com.cheer.ba.model.TagModel;
import com.cheer.ba.model.UserInfoModel;
import com.cheer.ba.model.WeatherModel;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * API接口
 */
public interface APIService {

    /***************************************用户相关***********************************************/
    /**
     * 注册
     *
     * @param act              非必须
     * @param phone            手机号
     * @param password         密码
     * @param veriCode         短信验证码
     * @param custRegType      注册来源 1,wx 2,wb 3,qq 4,phone
     * @param channel          注册频道
     * @param cust_reg_inviter 邀请人
     *                         created at 2017/3/8 0008 14:08
     */
    @FormUrlEncoded
    @POST(API.REGISTER)
    public Call<ResponseData<UserInfoModel>> register(
            @Field("act") int act,
            @Field("phone") String phone,
            @Field("password") String password,
            @Field("veriCode") String veriCode,
            @Field("custRegType") String custRegType,
            @Field("channel") String channel,
            @Field("cust_reg_inviter") String cust_reg_inviter
    );

    /**
     * 短信验证码
     *
     * @param act     非必须
     * @param phone   手机号
     * @param custId  用户id
     * @param smsType 1注册 2忘记密码 6绑定银行卡
     * @author HQ
     * created at 2017/3/3 0003 16:32
     */
    @FormUrlEncoded
    @POST(API.USER_SENDSMS)
    public Call<ResponseData<UserInfoModel>> getSms(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("phone") String phone,
            @Field("smsType") String smsType
    );

    /**
     * 登录
     *
     * @param act      非必须
     * @param phone    手机号
     * @param password 密码
     * @author HQ
     * created at 2017/3/3 0003 16:32
     */
    @FormUrlEncoded
    @POST(API.USER_LOGIN)
    public Call<ResponseData<UserInfoModel>> login(
            @Field("act") int act,
            @Field("phone") String phone,
            @Field("password") String password
    );

    /**
     * 忘记密码
     *
     * @param act      非必须
     * @param phone    手机号
     * @param password 密码
     * @param veriCode 短信验证码
     * @author HQ
     * created at 2017/3/8 0008 14:08
     */
    @FormUrlEncoded
    @POST(API.RESET_PW)
    public Call<ResponseData> resetPw(
            @Field("act") int act,
            @Field("phone") String phone,
            @Field("password") String password,
            @Field("veriCode") String veriCode
    );

    /**
     * 修改登录密码
     *
     * @param act         非必须
     * @param custId      用户id
     * @param password    旧密码
     * @param newPassword 新密码
     */
    @FormUrlEncoded
    @POST(API.MODIFY_LOGIN_PW)
    public Call<ResponseData> modifyPw(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("password") String password,
            @Field("newPassword") String newPassword
    );

    /**
     * 保存头像
     *
     * @param act     非必须
     * @param custId  用户id
     * @param headImg 用户头像
     * @return
     */
    @FormUrlEncoded
    @POST(API.PERSON_INFO_UPDATE)
    Call<ResponseData> editSaveHeadImg(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("headImg") String headImg
    );

    /**
     * 保存昵称
     *
     * @param act      非必须
     * @param custId   用户id
     * @param nickName 用户昵称
     * @return
     */
    @FormUrlEncoded
    @POST(API.PERSON_INFO_UPDATE)
    Call<ResponseData> editSaveNickName(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("nickName") String nickName
    );

    /**
     * 保存性别
     *
     * @param act    非必须
     * @param custId 用户id
     * @param sex    用户性别
     * @return
     */
    @FormUrlEncoded
    @POST(API.PERSON_INFO_UPDATE)
    Call<ResponseData> editSaveSex(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("sex") String sex
    );

    /**
     * 保存用户地址
     *
     * @param act      非必须
     * @param custId   用户id
     * @param location 用户地址
     * @return
     */
    @FormUrlEncoded
    @POST(API.PERSON_INFO_UPDATE)
    Call<ResponseData> editSaveLoc(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("location") String location
    );

    /**
     * 保存用户签名
     *
     * @param act       非必须
     * @param custId    用户id
     * @param signature 用户签名
     * @return
     */
    @FormUrlEncoded
    @POST(API.PERSON_INFO_UPDATE)
    Call<ResponseData> editSaveSign(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("signature") String signature
    );

    /**
     * 保存用户备注
     *
     * @param act    非必须
     * @param custId 用户id
     * @param desc   用户备注
     * @return
     */
    @FormUrlEncoded
    @POST(API.PERSON_INFO_UPDATE)
    Call<ResponseData> editSaveDesc(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("desc") String desc
    );

    /**
     * 用户签到
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.USER_SIGN)
    Call<ResponseData<PointModel>> userSign(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 我的订单
     *
     * @param act        非必须
     * @param custId     用户id
     * @param orderState 1待支付4已支付5完成
     * @return
     */
    @FormUrlEncoded
    @POST(API.USER_ORDER)
    Call<ResponseData<List<MyOrderModel>>> userOrders(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("orderState") String orderState,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 投诉建议
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.USER_SUGGEST)
    Call<ResponseData> mySuggest(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("complaintTitle") String complaintTitle,
            @Field("complaintContext") String complaintContext,
            @Field("complaintType") String complaintType,
            @Field("url1") String url1
    );

    /**
     * 添加常用地址
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.ADD_MY_ADDRESS)
    Call<ResponseData<MyAddressModel>> addMyAddress(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("name") String name,
            @Field("tel") String tel,
            @Field("location") String location
    );

    /**
     * 获得我的常用地址
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_MY_ADDRESS_LIST)
    Call<ResponseData<List<MyAddressModel>>> getMyAddress(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 移除我的常用地址
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.DEL_MY_ADDRESS)
    Call<ResponseData<MyAddressModel>> delMyAddress(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("addressId") String addressId
    );

    /**
     * 我的常用地址设为默认
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.DEFAULT_MY_ADDRESS)
    Call<ResponseData<MyAddressModel>> defaultMyAddress(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("addressId") String addressId
    );

    /**
     * 获取我的默认地址
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_DEFAULT_ADDRESS)
    Call<ResponseData<MyAddressModel>> getMyDefaultAddress(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 我的积分
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_MY_POINT)
    Call<ResponseData<List<PointModel>>> getMyPoints(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("logType") String logType,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 我的消费金额
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_TOTAL_ORDER)
    Call<ResponseData<PointModel>> getMyTotalOrder(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("startDate") String startDate,
            @Field("endDate") String endDate
    );

    /**
     * 我的总积分数
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_TOTAL_POINT)
    Call<ResponseData<PointModel>> getMyTotalPoint(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 获得我的企业认证列表
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_ORG_AUTH_LIST)
    public Call<ResponseData<List<QyeAuthModel>>> getOrgAuthList(
            @Field("act") int act,
            @Field("name") String name
    );

    /**
     * 去认证
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.GO_TO_AUTH)
    public Call<ResponseData> goToAuth(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("orgId") String orgId,
            @Field("content") String content
    );

    /**
     * 我认证的企业
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.MY_AUTH_QYE)
    public Call<ResponseData<QyeAuthModel>> myAuthQye(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("orgId") String orgId
    );

    /**
     * 取消认证
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.CANCEL_AUTH_QYE)
    public Call<ResponseData> cancelAuthQye(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("orgId") String orgId
    );

    /**
     * 查看我的交易记录
     *
     * @param act     非必须
     * @param logType 0所有1进2出
     * @return
     */
    @FormUrlEncoded
    @POST(API.LOOK_TRADE_RECORD)
    public Call<ResponseData<List<LookMyBillModel>>> getMyTrades(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("logType") String logType,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 校验密码
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.CHECK_LOGIN_PW)
    public Call<ResponseData> checkLoginPw(
            @Field("act") int act,
            @Field("phone") String phone,
            @Field("password") String password
    );

    /**
     * 查询用户信息
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.CHECK_USER_INFO)
    public Call<ResponseData<UserInfoModel>> checkUserInfo(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 查询常量
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_PAY_MONEY)
    public Call<ResponseData<ConstantModel>> getConstant(
            @Field("act") int act,
            @Field("key") String key
    );

    /***************************************三方服务***********************************************/

    /**
     * 违章查询
     *
     * @param act      非必须
     * @param carorg   管理局名称，默认车牌所在地
     * @param engineno //发动机号 根据管局需要输入（100为全部输入，0为不输入）
     * @param frameno  //车架号 根据管局需要输入（100为全部输入，0为不输入）
     * @param iscity   //是否返回城市 1返回 默认0不返回 不一定100%返回结果，准确度90% town、lat、lng仅供参考
     * @param lsnum    //车牌剩余部分
     * @param lsprefix //车牌前缀
     * @param lstype   //车牌类型
     * @return
     */
    @FormUrlEncoded
    @POST(API.SEARCH_BREAK_CAR)
    public Call<ResponseData<BreakRulesModel>> searchBreakRules(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("carorg") String carorg,
            @Field("engineno") String engineno,
            @Field("frameno") String frameno,
            @Field("iscity") String iscity,
            @Field("lsnum") String lsnum,
            @Field("lsprefix") String lsprefix,
            @Field("lstype") String lstype
    );

    /**
     * 今日油价
     *
     * @param act  非必须
     * @param prov 省份
     * @return
     */
    @FormUrlEncoded
    @POST(API.TODAY_OIL)
    public Call<ResponseData<List<HotExchangeModel>>> getTodayOils(
            @Field("act") int act,
            @Field("prov") String prov
    );

    /**
     * 查询天气
     *
     * @param act      非必须
     * @param city     城市
     * @param citycode 城市天气代号
     * @param cityid   城市id
     * @param ip
     * @param location 经纬度，格式：纬度，经度
     * @return
     */
    @FormUrlEncoded
    @POST(API.SEARCH_WEATHER)
    public Call<ResponseData<WeatherModel>> searchWearth(
            @Field("act") int act,
            @Field("city") String city,
            @Field("citycode") String citycode,
            @Field("cityid") String cityid,
            @Field("ip") String ip,
            @Field("location") String location
    );

    /***************************************ping++支付***********************************************/

    /**
     * 企业支付
     *
     * @param act       非必须
     * @param couponId  优惠券ID
     * @param orderSrc  1-web端； 2-Android端；3-IOS端； 4-wap端 在手机中支付时，不要传入1
     * @param custId    用户ID
     * @param productId 产品ID
     * @param amount    折扣前金额
     * @param feeAmount 手续费
     * @return
     */
    @FormUrlEncoded
    @POST(API.QYE_PAY)
    public Call<ResponseData<QyePayInfoModel>> getQyePayInfo(
            @Field("act") int act,
            @Field("couponId") String couponId,
            @Field("orderSrc") String orderSrc,
            @Field("custId") String custId,
            @Field("productId") String productId,
            @Field("amount") String amount,
            @Field("feeAmount") String feeAmount
    );

    /**
     * 新生支付
     *
     * @return
     */
    @FormUrlEncoded
    @POST(API.NEW_PAY_TAG)
    public Call<ResponseData<NewPayModel>> getNewPayOrder(
            @Field("version") String version,
            @Field("tranCode") String tranCode,
            @Field("merId") String merId,
            @Field("merOrderId") String merOrderId,
            @Field("submitTime") String submitTime,
            @Field("msgCiphertext") String msgCiphertext,
            @Field("signType") String signType,
            @Field("signValue") String signValue,
            @Field("merAttach") String merAttach,
            @Field("charset") String charset
    );

    /**
     * 企业柴油支付回调
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.QYE_PAY_CALLBACK)
    public Call<ResponseData> getQyePayCallBack(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("packageId") String packageId,
            @Field("cardId") String cardId,
            @Field("orderId") String orderId,
            @Field("couponId") String couponId
    );

    /**
     * 柴油卡激活
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.OIL_CARD_ACTIVITY)
    public Call<ResponseData<PayInfoModel>> activityOilCard(
            @Field("act") int act,
            @Field("couponId") String couponId,
            @Field("orderSrc") String orderSrc,
            @Field("custId") String custId,
            @Field("amount") String amount,
            @Field("feeAmount") String feeAmount
    );

    /**
     * ping++支付
     *
     * @param act       非必须
     * @param token
     * @param orderSrc  1-web端； 2-Android端；3-IOS端； 4-wap端 在手机中支付时，不要传入1
     * @param productId 产品ID
     * @param amount    订单总金额，未打折
     * @param feeAmount 手续费
     * @param channel   (字母全小写)alipay（支付宝移动支付） Wx（微信 App 支付） QQWallet（QQ钱包 App 支付） UnionPay（银联手机支付） ApplePay Fqlpay（分期乐） Qgbc（量化
     * @param custId    用户ID
     * @return
     */
    @FormUrlEncoded
    @POST(API.PAY_MONEY)
    public Call<ResponseData<PayInfoModel>> getPayInfo(
            @Field("act") int act,
            @Field("token") String token,
            @Field("orderSrc") String orderSrc,
            @Field("productId") String productId,
            @Field("amount") String amount,
            @Field("feeAmount") String feeAmount,
            @Field("channel") String channel,
            @Field("custId") String custId,
            @Field("couponId") String couponId
    );

    /**
     * 柴油批发订单下单
     *
     * @param channel      (字母全小写)alipay（支付宝移动支付） Wx（微信 App 支付） QQWallet（QQ钱包 App 支付） UnionPay（银联手机支付） ApplePay Fqlpay（分期乐） Qgbc（量化
     * @param couponId     优惠券ID
     * @param custId       用户ID
     * @param supplyId     供应商ID
     * @param deliveryMode 配送方式1自提2包送
     * @param buyNumber    购买数量
     * @param throughTime  期望送达时间
     * @param name         收件人姓名
     * @param tel          收件人电话
     * @param location     收货地址
     * @param amount       订单总金额，未打折
     * @param feeAmount    手续费
     * @param orderSrc     1-web端； 2-Android端；3-IOS端； 4-wap端 在手机中支付时，不要传入1
     * @param remark       买家备注
     */
    @FormUrlEncoded
    @POST(API.OIL_ORDER_SEND)
    public Call<ResponseData<PayInfoModel>> getOilSendOrder(
            @Field("act") int act,
            @Field("channel") String channel,
            @Field("couponId") String couponId,
            @Field("custId") String custId,
            @Field("supplyId") String supplyId,
            @Field("deliveryMode") String deliveryMode,
            @Field("buyNumber") String buyNumber,
            @Field("throughTime") String throughTime,
            @Field("name") String name,
            @Field("tel") String tel,
            @Field("location") String location,
            @Field("amount") String amount,
            @Field("feeAmount") String feeAmount,
            @Field("orderSrc") String orderSrc,
            @Field("remark") String remark
    );

    /**
     * 柴油批发回调
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.OIL_ORDER_CALLBACK)
    public Call<ResponseData> oilSendCallBack(
            @Field("act") int act,
            @Field("orderId") String orderId,
            @Field("custId") String custId
    );

    /**
     * 取消待支付订单
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.CANCEL_ORDER)
    public Call<ResponseData> cancelOrder(
            @Field("act") int act,
            @Field("orderId") String orderId,
            @Field("custId") String custId
    );

    /**
     * 已支付订单申请退款
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.ASK_BACK_MONEY_ORDER)
    public Call<ResponseData> askBackMoneyOrder(
            @Field("act") int act,
            @Field("orderId") String orderId,
            @Field("custId") String custId
    );

    /**
     * 查看订单详情
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.LOOK_ORDER_DETAIL)
    public Call<ResponseData<MyOrderModel>> lookOrderDetails(
            @Field("act") int act,
            @Field("orderId") String orderId,
            @Field("custId") String custId
    );

    /**
     * 企业划扣
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.QYE_PULL_MONEY)
    public Call<ResponseData> qYPullMoney(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("cardId") String cardId,
            @Field("toMoney") String toMoney
    );

    /***************************************加油啦平台***********************************************/

    /**
     * 获取首页banner
     */
    @FormUrlEncoded
    @POST(API.HOME_BANNER)
    public Call<ResponseData<List<BannerModel>>> getBanners(
            @Field("act") int act
    );

    /**
     * 购买油卡
     *
     * @param act       非必须
     * @param custId    用户ID
     * @param packageId 套餐ID
     * @param cardId    油卡ID
     * @param orderId   订单ID
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(API.BUY_OIL_CARD)
    public Call<ResponseData> buyOilCard(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("packageId") String packageId,
            @Field("cardId") String cardId,
            @Field("orderId") String orderId,
            @Field("token") String token,
            @Field("couponId") String couponId
    );

    /**
     * 申请融资
     *
     * @param act           非必须
     * @param applicantName 申请人名称
     * @param applicantTel  申请人电话
     * @param applicantNo   申请人身份证
     * @param business      营业执照
     * @param ricence       经营许可证
     * @param remark        备注
     * @return
     */
    @FormUrlEncoded
    @POST(API.ASK_FINACING)
    public Call<ResponseData> askFinacing(
            @Field("act") int act,
            @Field("applicantName") String applicantName,
            @Field("applicantTel") String applicantTel,
            @Field("applicantNo") String applicantNo,
            @Field("business") String business,
            @Field("ricence") String ricence,
            @Field("remark") String remark
    );

    /**
     * 我的油卡
     *
     * @param act        非必须
     * @param custId     用户id
     * @param token      用户唯一标识
     * @param cardStatus 0所有1：申请中，2：启用3：停用
     * @param prov       省份
     * @return
     */
    @FormUrlEncoded
    @POST(API.MY_OIL_CARD)
    public Call<ResponseData<List<OilCardInfoModel>>> getMyOilCard(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("token") String token,
            @Field("isMain") String isMain,
            @Field("cardStatus") String cardStatus,
            @Field("prov") String prov,
            @Field("name") String name,
            @Field("tel") String tel,
            @Field("plateNumber") String plateNumber,
            @Field("search") String search
    );

    /**
     * 添加油卡
     *
     * @param act         非必须
     * @param cardAddress 注册地址
     * @param cardId      身份证
     * @param cardNum     卡号
     * @param cardTel     联系电话
     * @param cardType    油卡类型1：中石油2：中石化3：中海油
     * @param custId      用户ID
     * @param custName    用户名称
     * @param idUrl1      身份证正面
     * @param idUrl2      身份证反面
     * @param isMain      1:默认
     * @return
     */
    @FormUrlEncoded
    @POST(API.ADD_OIL_CARD)
    public Call<ResponseData<OilCardInfoModel>> AddMyOilCard(
            @Field("act") int act,
            @Field("cardAddress") String cardAddress,
            @Field("cardId") String cardId,
            @Field("cardNum") String cardNum,
            @Field("cardTel") String cardTel,
            @Field("cardType") String cardType,
            @Field("custId") String custId,
            @Field("custName") String custName,
            @Field("idUrl1") String idUrl1,
            @Field("idUrl2") String idUrl2,
            @Field("isMain") String isMain,
            @Field("cardCount") String cardCount
    );

    /**
     * 绑定油卡
     *
     * @param act     非必须
     * @param custId  用户ID
     * @param cardNum 卡号
     * @return
     */
    @FormUrlEncoded
    @POST(API.BIND_OIL_CARD)
    public Call<ResponseData<OilCardInfoModel>> bindOilCard(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("cardNum") String cardNum
    );

    /**
     * 移除油卡
     *
     * @param act    非必须
     * @param token  用户唯一标识
     * @param custId 用户ID
     * @param uid    用户油卡ID
     * @return
     */
    @FormUrlEncoded
    @POST(API.DEL_OIL_CARD)
    public Call<ResponseData> delOilCard(
            @Field("act") int act,
            @Field("token") String token,
            @Field("custId") String custId,
            @Field("uid") String uid
    );

    /**
     * 加油卡套餐
     *
     * @param act         非必须
     * @param packageType 1：柴油2：汽油，不输入或输入0查全部
     * @return
     */
    @FormUrlEncoded
    @POST(API.SET_MEAL_OIL)
    public Call<ResponseData<List<OilMealModel>>> getOilCards(
            @Field("act") int act,
            @Field("packageType") String packageType
    );

    /**
     * 设置默认卡
     *
     * @param act    非必须
     * @param token
     * @param custId 用户ID
     * @param uid    油卡ID
     * @return
     */
    @FormUrlEncoded
    @POST(API.SET_DEFAUL_CARD)
    public Call<ResponseData> setDefaultCard(
            @Field("act") int act,
            @Field("token") String token,
            @Field("custId") String custId,
            @Field("uid") String uid
    );

    /**
     * 空卡数量
     *
     * @param act   非必须
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(API.SET_MEAL_OIL)
    public Call<ResponseData<OilMealModel>> getCardNum(
            @Field("act") int act,
            @Field("token") String token
    );

    /**
     * 首次购买油卡
     *
     * @param act         非必须
     * @param token
     * @param custId      用户ID
     * @param packageId   套餐ID
     * @param orderId     订单号
     * @param cardType    油卡类型1：中石油2：中石化3：中海油
     * @param cardTel     电话
     * @param cardAddress 地址
     * @param cardId      身份证
     * @param custName
     * @param idUrl1      身份证正面
     * @param idUrl2      身份证反面
     * @return
     */
    @FormUrlEncoded
    @POST(API.SET_MEAL_OIL)
    public Call<ResponseData> getCardNum(
            @Field("act") int act,
            @Field("token") String token,
            @Field("custId") String custId,
            @Field("packageId") String packageId,
            @Field("orderId") String orderId,
            @Field("cardType") String cardType,
            @Field("cardTel") String cardTel,
            @Field("cardAddress") String cardAddress,
            @Field("cardId") String cardId,
            @Field("custName") String custName,
            @Field("idUrl1") String idUrl1,
            @Field("idUrl2") String idUrl2
    );

    /**
     * 油卡变更记录
     *
     * @param act     非必须
     * @param cardId  油卡ID
     * @param logType 记录类型1进2出0所有
     * @return
     */
    @FormUrlEncoded
    @POST(API.CHANGE_OIL_CARD)
    public Call<ResponseData<List<LookMyBillModel>>> changeOilCard(
            @Field("act") int act,
            @Field("cardId") String cardId,
            @Field("logType") String logType,
            @Field("orderId") String orderId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 用户油卡变更记录
     *
     * @param act     非必须
     * @param custId  用户ID
     * @param logType 记录类型1进2出0所有
     * @return
     */
    @FormUrlEncoded
    @POST(API.CHANGE_USER_OIL_CARD)
    public Call<ResponseData<List<OilCardInfoModel>>> changeUserOilCard(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("logType") String logType
    );

    /**
     * 我的套餐
     *
     * @param act    非必须
     * @param custId 用户ID
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_MY_MEALS)
    public Call<ResponseData<List<OilMealModel>>> getMyMeamlList(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /***************************************运营活动接口****************************************/
    /**
     * 抽奖
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.LOTTERY_PRIZE)
    public Call<ResponseData<List<PlayerModel>>> lotteryPrize(
            @Field("act") int act
    );

    /**
     * 优惠卡列表
     *
     * @param couponDetailsStatus 优惠券状态0未使用1已使用2已过期
     */
    @FormUrlEncoded
    @POST(API.FREE_CARD_LIST)
    public Call<ResponseData<List<CouponCardModel>>> getCouponCardList(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("couponDetailsStatus") int couponDetailsStatus,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 用户可用优惠卡列表
     *
     * @param orderMoney 消费金额单位分
     */
    @FormUrlEncoded
    @POST(API.USER_AVAILABLECOUPON)
    public Call<ResponseData<List<CouponCardModel>>> getUserDiscountList(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("orderMoney") String orderMoney,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 用户注册大礼包
     */
    @FormUrlEncoded
    @POST(API.USER_REGISTER_GIFT)
    public Call<ResponseData> getUserRegisterGift(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /***************************************账本接口****************************************/
    /**
     * 查询我的账本
     *
     * @param act       非必须
     * @param custId    用户id
     * @param logType   0所有 1系统进账 2系统出账 3手动记账 4手动出账
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param start     下标
     * @param limit     每页加载数据
     * @return
     */
    @FormUrlEncoded
    @POST(API.SEARCH_MY_BOOK)
    public Call<ResponseData<List<LookMyBillModel>>> searchMyBooks(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("logType") String logType,
            @Field("startDate") String startDate,
            @Field("endDate") String endDate,
            @Field("start") int start,
            @Field("limit") int limit

    );

    /**
     * 添加我的账本
     *
     * @param act         非必须
     * @param custId      用户id
     * @param accountType 1个人2企业
     * @param logType     1进2出
     * @return
     */
    @FormUrlEncoded
    @POST(API.ADD_MY_BOOK)
    public Call<ResponseData<LookMyBillModel>> addMyBooks(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("name") String name,
            @Field("remark") String remark,
            @Field("attachmentUrl1") String attachmentUrl1,
            @Field("attachmentUrl2") String attachmentUrl2,
            @Field("accountType") String accountType,
            @Field("money") String money,
            @Field("logType") String logType

    );

    /**
     * 移除我的账本
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.DEL_MY_BOOK)
    public Call<ResponseData<LookMyBillModel>> delMyBooks(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("accountBookId") String accountBookId

    );

    /**
     * 我的发票
     *
     * @param act    非必须
     * @param custId 用户id
     * @return
     */
    @FormUrlEncoded
    @POST(API.MY_INVOICE)
    public Call<ResponseData<List<MyOrderModel>>> myInvoices(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("start") int start,
            @Field("limit") int limit

    );

    /**
     * 添加我的发票
     *
     * @param act         非必须
     * @param custId      用户id
     * @param invoiceType 发票类型 1 个人 2 企业
     * @param money       支付金额
     * @param orderId     订单id
     * @param invoiceNum  税号
     * @return
     */
    @FormUrlEncoded
    @POST(API.ADD_MY_INVOICE)
    public Call<ResponseData<MyOrderModel>> addMyInvoices(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("invoiceType") String invoiceType,
            @Field("money") String money,
            @Field("orderId") String orderId,
            @Field("invoiceNum") String invoiceNum,
            @Field("invoiceTitle") String invoiceTitle,
            @Field("bankName") String bankName,
            @Field("bankAccount") String bankAccount,
            @Field("invoiceContent") String invoiceContent,
            @Field("name") String name,
            @Field("tel") String tel,
            @Field("location") String location
    );

    /***************************************资讯接口****************************************/
    /**
     * 资讯列表
     *
     * @param act       非必须
     * @param channelId 频道id
     * @return
     */
    @FormUrlEncoded
    @POST(API.ARTICLE_LIST)
    public Call<ResponseData<List<ArticleModel>>> mGetArticles(
            @Field("act") int act,
            @Field("channelId") String channelId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 评论列表
     *
     * @param act        非必须
     * @param sourceType 1:资讯2订单 5柴油批发
     * @param sourceId   评论对象ID
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_COMMENT_LIST)
    public Call<ResponseData<List<CommentModel>>> getUserComments(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("sourceType") String sourceType,
            @Field("sourceId") String sourceId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 回复列表
     *
     * @param act       非必须
     * @param commentId 评论ID
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_REPLY_LIST)
    public Call<ResponseData<List<CommentModel>>> getReplyList(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("commentId") String commentId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 删除评论或者回复
     *
     * @param act       非必须
     * @param commentId 评论或回复ID
     * @return
     */
    @FormUrlEncoded
    @POST(API.DEL_MY_COMMENT)
    public Call<ResponseData> delMyComment(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("commentId") String commentId
    );

    /**
     * 动态列表
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.DYNAMIC_LIST)
    public Call<ResponseData<List<CheerCircleModel>>> getDynamicList(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 标签获取动态列表
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.DYNAMIC_LIST_TAG)
    public Call<ResponseData<List<CheerCircleModel>>> getDynamicListTag(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("tagId") String tagId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 用户操作对象 1:浏览2下载3收藏4点赞5转发
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.USER_OPERATION)
    public Call<ResponseData> userOperation(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("operationType") String operationType,
            @Field("sourceType") String sourceType,
            @Field("sourceId") String sourceId
    );

    /**
     * 用户取消点赞
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.USER_DEL_OPERATION)
    public Call<ResponseData> userDelOperation(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("operationType") String operationType,
            @Field("sourceType") String sourceType,
            @Field("sourceId") String sourceId
    );

    /**
     * 用户评论
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.USER_COMMENT)
    public Call<ResponseData<CommentModel>> userComment(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("content") String content,
            @Field("sourceType") String sourceType,
            @Field("sourceId") String sourceId,
            @Field("picJson") String picJson
    );

    /**
     * 用户回复
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.USER_REPLY)
    public Call<ResponseData<CommentModel>> userReply(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("content") String content,
            @Field("sourceType") String sourceType,
            @Field("sourceId") String sourceId,
            @Field("replyCustId") String replyCustId,
            @Field("replyCommentId") String replyCommentId
    );

    /**
     * 动态删除
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.DEL_DYNAMIC)
    public Call<ResponseData> delDynamic(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("dynamicId") String dynamicId
    );

    /**
     * 点赞列表
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_ZAN_LIST)
    public Call<ResponseData<List<CommentModel>>> getZanList(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("sourceType") String sourceType,
            @Field("sourceId") String sourceId
    );

    /**
     * 标签列表
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.GET_TAG_LIST)
    public Call<ResponseData<List<TagModel>>> getTagList(
            @Field("act") int act,
            @Field("tagType") String tagType
    );

    /**
     * 动态发布
     *
     * @param act 非必须
     * @return
     */
    @FormUrlEncoded
    @POST(API.PUBLISH_DYNAMIC)
    public Call<ResponseData> publishDynamic(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("title") String title,
            @Field("tagsId") String tagsId,
            @Field("picJson") String picJson,
            @Field("dynamicType") String dynamicType,
            @Field("location") String location
    );

    /**
     * 优惠油卡购买
     */
    @FormUrlEncoded
    @POST(API.CHECK_OIL_ORDER)
    public Call<ResponseData<CouponCardModel>> checkOilSuccess(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("cardId") String cardId,
            @Field("orderNum") String orderNum
    );

    /**
     * 匹配可用支付券
     *
     * @param type 2普惠 1特惠
     */
    @FormUrlEncoded
    @POST(API.GET_OIL_COUPON)
    public Call<ResponseData<List<CouponCardModel>>> matchOilCoupon(
            @Field("act") int act,
            @Field("cost") String cost,
            @Field("custId") String custId,
            @Field("type") int type
    );

    /**
     * 获取柴油批发列表
     *
     * @param location      地区
     * @param oilCategory   油源1：中石油2：中石化3：中海油
     * @param oilType       1:柴油
     * @param oilModel      标号1:普柴2:国V
     * @param isVolumeOrder 是否按销量排序-1不排1排序
     * @param isPriceOrder  是否按单价排序-1不排1排序
     * @param deliveryMode  配送方式1自提2包送
     * @param search        关键字搜索
     */
    @FormUrlEncoded
    @POST(API.GET_OIL_SALE_LIST)
    public Call<ResponseData<List<OilGoodsInfoModel>>> getOilSaleList(
            @Field("act") int act,
            @Field("location") String location,
            @Field("oilCategory") String oilCategory,
            @Field("oilType") String oilType,
            @Field("oilModel") String oilModel,
            @Field("isVolumeOrder") String isVolumeOrder,
            @Field("isPriceOrder") String isPriceOrder,
            @Field("deliveryMode") String deliveryMode,
            @Field("search") String search,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 获取油源列表
     * name 油源名称
     * uid 油源对应的id
     */
    @FormUrlEncoded
    @POST(API.GET_OIL_TYPE_LIST)
    public Call<ResponseData<List<OilGoodsInfoModel>>> getOilTypeList(
            @Field("act") int act
    );

    /**
     * 获取油源详情
     *
     * @param supplyId 油源id
     */
    @FormUrlEncoded
    @POST(API.GET_OIL_DETAILS)
    public Call<ResponseData<OilDetailsModel>> getOilDetails(
            @Field("act") int act,
            @Field("supplyId") String supplyId
    );

    /**
     * 定金计算列表
     */
    @FormUrlEncoded
    @POST(API.CALCULATE_MONEY)
    public Call<ResponseData<List<CalculateMoneyModel>>> getCalculateMoney(
            @Field("act") int act
    );

    /**
     * 司机列表
     * name 油源名称
     * uid 油源对应的id
     */
    @FormUrlEncoded
    @POST(API.DRIVERS_LIST)
    public Call<ResponseData<List<OilCardInfoModel>>> getDriverList(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("name") String name,
            @Field("plateNumber") String plateNumber,
            @Field("tel") String tel,
            @Field("cardId") String cardId,
            @Field("start") int start,
            @Field("limit") int limit,
            @Field("search") String search
    );

    /**
     * 移除司机
     * name 油源名称
     * uid 油源对应的id
     */
    @FormUrlEncoded
    @POST(API.DEL_DRIVER_CARD)
    public Call<ResponseData<OilCardInfoModel>> delDriver(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("driverId") String driverId
    );

    /**
     * 添加司机
     * name 油源名称
     * uid 油源对应的id
     */
    @FormUrlEncoded
    @POST(API.DRIVERS_ADD)
    public Call<ResponseData> addDriver(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("name") String name,
            @Field("plateNumber") String plateNumber,
            @Field("tel") String tel,
            @Field("cardId") String cardId,
            @Field("cardNum") String cardNum
    );

    /**
     * 绑定司机
     */
    @FormUrlEncoded
    @POST(API.DRIVERS_BIND)
    public Call<ResponseData<OilCardInfoModel>> bindDriver(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("driverId") String driverId,
            @Field("cardNum") String cardNum
    );

    /**
     * 获得我的卡券
     *
     * @param status 0:可用，1:已使用 2:已过期
     */
    @FormUrlEncoded
    @POST(API.GET_CARD_GROUP)
    public Call<ResponseData<List<MyCardGroupModel>>> getCardGroupList(
            @Field("act") int act,
            @Field("status") int status,
            @Field("custId") String custId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 获取优惠卡信息
     */
    @FormUrlEncoded
    @POST(API.GET_OIL_INFO)
    public Call<ResponseData<CouponCardModel>> getOilInfo(
            @Field("act") int act,
            @Field("openId") String openId,
            @Field("cardId") String cardId
    );

    /**
     * 获得地图上油站的位置信息
     */
    @FormUrlEncoded
    @POST(API.GET_OILADDRESS_POSITION)
    Call<ResponseData<List<MapModel>>> getOilAddress(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /***************************************邀请分利****************************************/
    /**
     * 邀请分费获利额度
     */
    @FormUrlEncoded
    @POST(API.REQUEST_DISTRIBUTION)
    Call<ResponseData<AskGetMoneyModel>> getInvitationMoney(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 获取邀请好友列表
     */
    @FormUrlEncoded
    @POST(API.GET_ASK_FRIENDS)
    Call<ResponseData<List<AskGetMoneyModel>>> getAskFriends(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 删除银行卡
     */
    @FormUrlEncoded
    @POST(API.DEL_BANK)
    Call<ResponseData> delBank(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("bankNo") String bankNo
    );

    /**
     * 添加银行卡
     */
    @FormUrlEncoded
    @POST(API.ADD_BANK)
    Call<ResponseData> addBank(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("phone") String phone,
            @Field("bankNo") String bankNo,
            @Field("bankName") String bankName,
            @Field("veriCode") String veriCode,
            @Field("bankAddress") String bankAddress
    );

    /**
     * 获取银行卡列表
     */
    @FormUrlEncoded
    @POST(API.GET_BAK_LIST)
    Call<ResponseData<List<BankModel>>> getBankList(
            @Field("act") int act,
            @Field("custId") String custId
    );

    /**
     * 提现
     */
    @FormUrlEncoded
    @POST(API.GET_MONEY)
    Call<ResponseData> getMoney(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("bankNo") String bankNo,
            @Field("money") String money
    );

    /**
     * 提现记录
     */
    @FormUrlEncoded
    @POST(API.GET_MONEY_RECORD)
    Call<ResponseData<List<LookMyBillModel>>> getMoneyRecords(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("start") int start,
            @Field("limit") int limit
    );

    /**
     * 用户经纬度
     */
    @FormUrlEncoded
    @POST(API.GET_USER_LOCATION)
    Call<ResponseData> getUserLocation(
            @Field("act") int act,
            @Field("custId") String custId,
            @Field("lat") String lat,
            @Field("lon") String lon,
            @Field("prov") String prov,
            @Field("city") String city,
            @Field("road") String road,
            @Field("inputMap") String inputMap,
            @Field("agentType") String agentType,
            @Field("locationType") String locationType
    );
}

